package com.yxjx.duoxue.network;

import java.util.HashMap;
import java.util.Hashtable;

import com.yxjx.duoxue.datamodel.ResponseObject;

/**
 * 消息码，错误消息码，验证消息码
 */
public class MsgCode {

    /**
     * 公共消息代码
     */
	
    /**
     * 0，未知错误
     */
    public static final int ERROR = 0;
    
    /**
     * -10, 使用指定的错误码
     */
	public static final int ERROR_CODE_WITH_SPECIFIED_DES = -10;

    /**
     * 10001，成功
     */
    public static final int SUCCESS = 10001;

    /**
     * -1，服务器异常
     */
    public static final int SERVER_EXCEPTION = -1;

    // 用户相关消息代码
    /**
     * 30001，用户不存在
     */
    public static final int USER_NOT_EXISTS = 30001;
    
    /**
     * 30002，用户未登录或超时
     */
    public static final int USER_SESSION_TIMEOUT_OR_NOTLOGIN = 30002;


    /**
     * 30003，数据解密失败
     */
    public static final int DECRYPT_DATA_FAIL = 30003;

    /**
     * 30004，账户与版本不对应
     */
    public static final int VERSION_OF_USER_FAIL = 30004;

    /**
     * 30005，验证码不正确
     */
    public static final int CAPTCHA_DATA_FAIL = 30005;

    /**
     * 30006，用户输入错误密码次数，超过允许的最大值
     */
    public static final int TIMES_OF_USER_LOGON_FAIL_OVERFLOW = 30006;
    
   
    /**
     *  30007，用户输入密码为空
     */
    public static final int USER_INPUT_PWD_EMPTY = 30007;
    /**
     * 30008，用户两次输入密码不同
     */
    public static final int USER_INPUT_PWD_INCONSISTENT = 30008;
    /**
     * 30009，旧密码输入错误
     */
    public static final int USER_INPUT_OLD_PWD_ERROR = 30009;

    /**
     * 42001，email不能为空
     */
    public static final int EMAIL_IS_EMPTY = 42001;

    /**
     * 42002，email格式不正确
     */
    public static final int EMAIL_FORMAT_ERR = 42002;

    /**
     * 42003，密码不能为空
     */
    public static final int PASSWORD_IS_EMPTY = 42003;

    /**
     * 42004，密码格式不正确
     */
    public static final int PASSWORD_FORMAT_ERR = 42004;

    /**
     * 42005，名字不能为空
     */
    public static final int NAME_IS_EMPTY = 42005;

    /**
     * 42006，名字格式不正确
     */
    public static final int NAME_FORMAT_ERR = 42006;

    /**
     * 42007，登陆类别不能为空
     */
    public static final int TYPE_IS_EMPTY = 42007;

    /**
     * 42008，验证码不能为空
     */
    public static final int CAPTCHA_IS_EMPTY = 42008;

    /**
     * 42009，验证码不匹配
     */
    public static final int CAPTCHA_NOT_MATCH = 42009;

    /**
     * 42010，用户帐号已经存在
     */
    public static final int USER_NAME_ALREADY_EXISTS = 42010;
    /**
     * 42011,用户地址过长
     */
    public static final int ADDRESS_LENGTH_OVERFLOW = 42011;
    /**
     * 42012，联系人名字长度过长
     */
    public static final int CONTACT_LENGTH_OVERFLOW = 42012;
    /**
     * 42013, 邮编格式不正确
     */
    public static final int ZIP_CODE_FORMAT_ERROR = 42013;
    /**
     * 42014，手机号码格式不正确/空
     */
    public static final int MOBILE_PHONE_FORMAT_ERROR = 42014;
    /**
     * 42015，身份证格式不正确
     */
    public static final int IDENTIFY_ID_FORMAT_ERROR = 42015;
    /**
     * 42016, 邮件确认发送失败
     */
    public static final int EMAIL_CONFIRM_ERROR = 42016;
    /**
     * 42017, 密码错误
     */
    public static final int PASSWORD_IS_WRONG = 42017;
    /**
     * 42018, 性别错误
     */
    public static final int GENDER_IS_WRONG = 42018;
    /**
     * 42019, 所在地不能为空
     */
    public static final int LOCAL_IS_WRONG = 42019;
    /**
     * 42020, 用户头像错误
     */
    public static final int USER_LOGO_IS_WRONG = 42020;
    

    // 格式错误
    /**
     * 40001，JSON格式错误
     */
    public static final int JSON_FORMAT_ERR = 40001;

    /**
     * 40002，参数不完整
     */
    public static final int PARAMETER_MISSING_ERR = 40002;

    
    /**
     * 41001，凭证MD5值不能为空
     */
    public static final int FILE_MD5_NOT_EXISTS = 41001;

    /**
     * 41002，凭证MD5值格式错误
     */
    public static final int FILE_MD5_FORMAT_ERROR = 41002;

    
    // 文件相关消息代码
    
    /**
     * 50005,上传文件过大
     */
    public static final int FILE_IS_TOO_LARGE = 50005;
    
    /**
     * 61002,用户已报名
     */
    public static final int USER_HAS_APOINTED = 61002;
    

    // 支付类错误码 70000-79999

    // 商品信息错误码 70000-70999
    /**
     * 70000，商品不存在
     */
    public static final int PAY_PRODUCT_ISNULL = 70000;

    /**
     * 70001, 商品超出可购买上限
     */
    public static final int PAY_PRODUCT_COUNT_ERROR = 70001;
    
    // 订单类信息错误码 71000-71999

    /**
     * 71000，订单不存在
     */
    public static final int PAY_ORDER_ISNULL = 71000;

    /**
     * 71001，订单已支付过
     */
    public static final int PAY_ORDER_ALREADYPAY = 71001;

    /**
     * 71002，订单状态异常
     */
    public static final int PAY_ORDER_ORDERSTATUS_ERROR = 71002;

    /**
     * 71010，订单退款理由错误
     */
    public static final int PAY_ORDER_REFUND_REASON_ERROR = 71010;

    /**
     * 71011，订单退款类型错误
     */
    public static final int PAY_ORDER_REFUND_TYPE_ERROR = 71011;
    
    /**
     * 71012，商品超出允许购买的上限(已达到此套餐的购买上限)
     */
    public static final int PAY_ORDER_UNIT_USER_COUNT_ERROR = 71012;

    // 优惠券相关错误码
    /**
     * 72000，优惠券不存在
     */
    public static final int COUPON_IS_NULL = 72000;
    
    /**
     * 72001，优惠券非法（用户无此优惠券）
     */
    public static final int COUPON_IS_ILLEGAL = 72001;
    
    /**
     * 72002,优惠券已被使用
     */
    public static final int COUPON_IS_USED = 72002;
    /**
     * 72003,优惠券未被使用(支付回调时的判断)
     */
    public static final int COUPON_IS_NOT_USED = 72003;
    
    /**
     * 72004,优惠券已被锁定
     */
    public static final int COUPON_IS_LOCKED = 72004;
    
    /**
     * 72005,订单价格未达优惠券最低使用价格
     */
    public static final int COUPON_LIMIT_PRICE = 72005;
    
    // 软件升级相关消息代码
    /**
     * 90000版本号相同，不需要更新
     */
    public static final int SOFTUPDATE_NO_UPDATE = 90000;
    
    /**
     * 90001设备号不能为空
     */
    public static final int SOFTUPDATE_DEVICE_ID_NULL = 90001;
    
    /**
     * 90002设备号不存在
     */
    public static final int SOFTUPDATE_DEVICE_ID_ERROR = 90002;
    
    /**
     * 90003版本号不能为空
     */
    public static final int SOFTUPDATE_VERSION_NULL = 90003;
    
    /**
     * 90004版本号格式错误
     */
    public static final int SOFTUPDATE_VERSION_ERROR = 90004;
    
    /**
     * 90005版本号过低，建议升级
     */
    public static final int SOFTUPDATE_VERSION_LOWER = 90005;
    
    /**
     * 90006版本号过高，请检查版本号
     */
    public static final int SOFTUPDATE_VERSION_HIGHER = 90006;
    
    private static Hashtable<Integer, String> sCodeDescriptionTable = new Hashtable<Integer, String>() {
    	{
    		put(ERROR, "未知错误");
    		put(SUCCESS, "成功");
    		put(SERVER_EXCEPTION, "服务器异常");
    		put(USER_NOT_EXISTS, "用户不存在");
    		put(USER_SESSION_TIMEOUT_OR_NOTLOGIN, "用户未登录或超时");
    		
    		put(DECRYPT_DATA_FAIL, "数据解密失败");
    		put(VERSION_OF_USER_FAIL, "账户与版本不对应");
    		put(CAPTCHA_DATA_FAIL, "验证码不正确");
    		put(TIMES_OF_USER_LOGON_FAIL_OVERFLOW, "用户输入错误密码次数，超过允许的最大值");
    		put(USER_INPUT_PWD_EMPTY, "用户输入密码为空");
    		put(USER_INPUT_PWD_INCONSISTENT, "用户两次输入密码不同");
    		put(USER_INPUT_OLD_PWD_ERROR, "旧密码输入错误");
    		put(EMAIL_IS_EMPTY, "email不能为空");
    		
    		
    		put(EMAIL_FORMAT_ERR, "email格式不正确");
    		put(PASSWORD_IS_EMPTY, "密码不能为空");
    		put(PASSWORD_FORMAT_ERR, "密码格式不正确");
    		put(NAME_IS_EMPTY, "名字不能为空");
    		put(NAME_FORMAT_ERR, "名字格式不正确");

    		put(TYPE_IS_EMPTY, "登陆类别不能为空");
    		put(CAPTCHA_IS_EMPTY, "验证码不能为空");
    		put(CAPTCHA_NOT_MATCH, "验证码不匹配");
    		put(USER_NAME_ALREADY_EXISTS, "用户帐号已经存在");
    		put(ADDRESS_LENGTH_OVERFLOW, "用户地址过长");

    		
    		put(CONTACT_LENGTH_OVERFLOW, "联系人名字长度过长");
    		put(ZIP_CODE_FORMAT_ERROR, "邮编格式不正确");
    		put(MOBILE_PHONE_FORMAT_ERROR, "手机号码格式不正确/空");
    		put(IDENTIFY_ID_FORMAT_ERROR, "身份证格式不正确");
    		put(EMAIL_CONFIRM_ERROR, "邮件确认发送失败");

    		put(PASSWORD_IS_WRONG, "密码错误");
    		put(GENDER_IS_WRONG, "性别错误");
    		put(LOCAL_IS_WRONG, " 所在地不能为空");
    		put(USER_LOGO_IS_WRONG, "用户头像错误");
    		put(JSON_FORMAT_ERR, "JSON格式错误");

    		
    		put(PARAMETER_MISSING_ERR, "参数不完整");
    		put(FILE_MD5_NOT_EXISTS, "凭证MD5值不能为空");
    		put(FILE_MD5_FORMAT_ERROR, "凭证MD5值格式错误");
    		put(FILE_IS_TOO_LARGE, "上传文件过大");
    		put(SOFTUPDATE_NO_UPDATE, "版本号相同，不需要更新");
    		
    		put(SOFTUPDATE_DEVICE_ID_NULL, "设备号不能为空");
    		put(SOFTUPDATE_DEVICE_ID_ERROR, "设备号不存在");
    		put(SOFTUPDATE_VERSION_NULL, "版本号不能为空");
    		put(SOFTUPDATE_VERSION_ERROR, "版本号格式错误");
    		put(SOFTUPDATE_VERSION_LOWER, "版本号过低，建议升级");
    		put(SOFTUPDATE_VERSION_HIGHER, "版本号过高，请检查版本号");
    		put(PAY_PRODUCT_ISNULL, "套餐不存在");
    		put(PAY_PRODUCT_COUNT_ERROR, "套餐超出可购买上限");
    		put(PAY_ORDER_ISNULL, "订单不存在");
    		put(PAY_ORDER_ALREADYPAY, "订单已支付过");
    		put(PAY_ORDER_ORDERSTATUS_ERROR, "订单状态异常");
    		put(PAY_ORDER_REFUND_REASON_ERROR, "订单退款理由错误");
    		put(PAY_ORDER_REFUND_TYPE_ERROR, "订单退款类型错误");
    		put(PAY_ORDER_UNIT_USER_COUNT_ERROR, "已达到此套餐的购买上限");
    		
    		put(COUPON_IS_NULL, "优惠券不存在");
    		put(COUPON_IS_ILLEGAL, "优惠券非法");
    		put(COUPON_IS_USED, "优惠券已被使用");
    		put(COUPON_IS_NOT_USED, "优惠券未被使用");
    		put(COUPON_IS_LOCKED, "优惠券已被锁定");
    		put(COUPON_LIMIT_PRICE, "订单价格未达优惠券最低使用价格");
    		
    		put(PAY_ORDER_UNIT_USER_COUNT_ERROR, "已达到此套餐的购买上限");
    		put(USER_HAS_APOINTED, "用户已报名");
    	}
    };
    
    private static String descFor(int code) {
    	if (sCodeDescriptionTable.containsKey(code)) {
    		return sCodeDescriptionTable.get(code);
    	}
    	return "未知错误" + code;
    	
    }
    
    public static String descFor(ResponseObject rsp) {
    	if (rsp == null) {
    		return "服务器请求结果错误";
    	}
    	if (rsp.getCode() == ERROR_CODE_WITH_SPECIFIED_DES) {
    		return rsp.getMsg();
    	} else {
    		return descFor(rsp.getCode());
    	}
    }
}
